package com.itheima.d2_buffered_stream;

import java.io.*;

/**
 * 目标：掌握字节缓冲流的作用。
 */
public class Test1BufferedInputStream {
    public static void main(String[] args) {
        File src = new File("day10io-app2/file/video1.mp4");
        File dest1 = new File("day10io-app2/file/video1-1.mp4");
        File dest2 = new File("day10io-app2/file/video1-2.mp4");

//        copyFile1(src,dest1); //基本流拷贝时间：未知
        copyFile2(src,dest2); //高效流时间：2.462s
    }

    //将源文件src拷贝到目标文件dest中
    //【方法一】使用基本流完成文件的拷贝
    public static void copyFile1(File src, File dest) {
        System.out.println("基本流拷贝开始～");
        long t1 = System.currentTimeMillis();
        //使用基本流完成文件的拷贝   FileInputStream   FileOutputStream
        try (FileInputStream fis = new FileInputStream(src);
             FileOutputStream fos = new FileOutputStream(dest)) {

            //读写单个字节拷贝
            int b; //临时保存读取的字节
            while ((b = fis.read()) != -1) {
                //将读取的字节写到目标文件中
                fos.write(b);
            }

        }catch (IOException e) {
            e.printStackTrace();
        }

        long t2 = System.currentTimeMillis();
        System.out.println("使用基本流拷贝花费时间：" + (t2 - t1) / 1000.0);
    }

    //【方法二】使用缓冲流方法进行拷贝
    public static void copyFile2(File src, File dest) {
        System.out.println("缓冲流拷贝开始～");
        long t1 = System.currentTimeMillis();
        //使用缓冲流进行拷贝
        try (FileInputStream fis = new FileInputStream(src);
             FileOutputStream fos = new FileOutputStream(dest);
             //进一步将基本流包装为缓冲流
             BufferedInputStream bis = new BufferedInputStream(fis);
             BufferedOutputStream bos = new BufferedOutputStream(fos);
        ) {

            //缓冲流的基本用法和基本流是一样的
            //读写单个字节拷贝
            int b; //临时保存读取的字节
            while ((b = bis.read()) != -1) {
                //将读取的字节写到目标文件中
                bos.write(b);
            }


        }catch (IOException e) {
            e.printStackTrace();
        }

        long t2 = System.currentTimeMillis();
        System.out.println("使用缓冲流拷贝花费时间：" + (t2 - t1) / 1000.0);
    }


}
